﻿using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Versioning;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PineLake.Drmwe.Core.WebApiVersions
{
    /// <summary>
    /// WEB API 版本控制
    /// </summary>
    public static class WebApiVersionStartup
    {
        public static void AddWebApiVersionStartup(this IServiceCollection Services)
        {
            if (Services == null) throw new ArgumentNullException(nameof(Services));
            Services.AddApiVersioning(ApiOtions =>
            {
                //返回响应标头中支持的版本信息
                //ReportApiVersions设置为true时,返回当前支持版本号（api-supported-versions）:Deprecated 参数设置为true表示已弃用，在响应头中也有显示（api-deprecated-versions）
                ApiOtions.ReportApiVersions = true;
                //此选项将用于不提供版本的请求。默认情况下, 假定的 API 版本为1.0
                ApiOtions.AssumeDefaultVersionWhenUnspecified = true;
                //缺省api版本号，支持时间或数字版本号
                ApiOtions.DefaultApiVersion = new ApiVersion(1, 0);
                //支持传递版本号的方式
                ApiOtions.ApiVersionReader = ApiVersionReader.Combine(
                              //new MediaTypeApiVersionReader("ApiXVersion"),//在MediaType中传递api版本
                              new HeaderApiVersionReader("ApiXVersion"), //请求头传递api版本
                              new QueryStringApiVersionReader("ApiXVersion"), // http://Ip:80/api/?ApiXVersion=1.0
                              new UrlSegmentApiVersionReader());              //固定版本号 默认
            });
        }
    }
}
